package com.ssy.lingxi.logistics.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.logistics.entity.LogisticsOrder;
import com.ssy.lingxi.workflow.api.model.vo.response.SimpleProcessDefVO;
import com.ssy.lingxi.workflow.api.model.vo.response.SimpleTaskCompleteVO;

/**
 * 物流单工作流服务类
 *
 * @author yzc
 * @version 2.0.0
 * @date 2021/1/26
 */
public interface ILogisticsOrderWorkFlowService {

    /**
     * 物流单开始工作流处理
     * @param logisticsOrder 物流单
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<SimpleTaskCompleteVO> startTaskProcess(LogisticsOrder logisticsOrder, UserLoginCacheDTO loginUser);

    /**
     * 物流单开始工作流并执行第一步
     * @param logisticsOrder 物流单
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<SimpleTaskCompleteVO> startThenCompleteTaskProcess(LogisticsOrder logisticsOrder, UserLoginCacheDTO loginUser);

    /**
     * 物流单执行下一步工作流
     * @param logisticsOrder 物流单
     * @param agree
     * @return 返回结果
     */
    Wrapper<SimpleTaskCompleteVO> completeTask(LogisticsOrder logisticsOrder, Integer agree);

    /**
     * 查询内部工作流步骤
     * @param memberId 会员id
     * @param processKey 任务流程key
     * @param taskId 任务id
     * @return 返回结果
     */
    Wrapper<SimpleProcessDefVO> listInternalProcessSteps(Long memberId, String processKey, String taskId);

    /**
     * 查询外部工作流步骤
     * @param roleId 上级角色id
     * @param subRoleId 下级角色id
     * @param processKey 任务流程key
     * @param taskId 任务id
     * @return 返回结果
     */
    Wrapper<SimpleProcessDefVO> listExternalProcessSteps(Long roleId, Long subRoleId, String processKey, String taskId);

}
